10 REM SOUND GENERATOR 12 PRINT"[147][144]":POKE53280,4:POKE53281,1 13 GOSUB51000 15 DIMOO$(1):OO$(0)="OFF":OO$(1)="ON" 20 DIMA%(2),D%(2),S%(2),R%(2),AD%(2),SR%(2),P1%(2),P2%(2) 30 DIMT1%(2),T2%(2),WF%(2),PW%(2) 50 FORL=54272TO54296:POKEL,0:NEXT 55 FORV=0TO2 57 TR%(V)=0:ST%(V)=0:PU%(V)=1:NO%(V)=0:RM%(V)=0:SY%(V)=0:TE%(V)=0 60 A%(V)=8:D%(V)=8:S%(V)=8:R%(V)=8:AD%(V)=136:SR%(V)=136 70 P1%(V)=8:P2%(V)=0:T1%(V)=32:T2%(V)=128 75 WF%(V)=64:PW%(V)=256*P1%(V)+P2%(V) 85 POKE54277+7*V,AD%(V):POKE54278+7*V,SR%(V):POKE54276+7*V,WF%(V) 90 POKE54275+7*V,P1%(V):POKE54274+7*V,P2%(V):POKE54273+7*V,T1%(V) 92 POKE54272+7*V,T2%(V):NEXT 95 V%=15:VN%=0:POKE54296,V% 97 CF%=0:RE%=0:F1%=0:F2%=0:F3%=0:LP%=0:BP%=0:HP%=0:O3%=0:EF%=0 100 REM START 110 M%=1 115 HT=8 117 PI%=16 120 PRINT"[147][144]":POKE53280,4:POKE53281,1 125 PRINT"[156][157][157][157][157][157][157][157][157][157][157][157][157][198]=[198]ILTER[157][157][157][157][157][157][157][157][205]=[205]ISC.[157][157][157][157][157][157][157][210][197][212][213][210][206]=[197]XIT"; 127 PRINT"[157][157][157][157][157][157][157][157][157][157][157]?=[201]NFO[144]" 130 PRINTTAB(HT-2)"[195]-64 [211]OUND [199]ENERATOR[144]" 140 PRINT:PRINTTAB(HT)"[195]OARSE [212]UNE:"T1%(VN%) 150 PRINT:PRINTTAB(HT)"[198]INE [212]UNE:"T2%(VN%) 160 PRINT:PRINTTAB(HT)"[193]TTACK:"A%(VN%) 170 PRINT:PRINTTAB(HT)"[196]ECAY:"D%(VN%) 180 PRINT:PRINTTAB(HT)"[211]USTAIN:"S%(VN%) 190 PRINT:PRINTTAB(HT)"[210]ELEASE:"R%(VN%) 200 PRINT:PRINTTAB(HT)"[215]AVEFORM:"2*INT(WF%(VN%)/2) 210 PRINT:PRINTTAB(HT)"[208]ULSE [215]IDTH:"PW%(VN%) 220 PRINT:PRINTTAB(HT)"[214]OLUME:"V% 230 PRINT:PRINTTAB(HT+3)"[211]OUND ";:IFWF%(VN%)/2=INT(WF%(VN%)/2)THENPRINT"OFF" 232 IFWF%(VN%)/2<>INT(WF%(VN%)/2)THENPRINT"ON" 235 PRINT:PRINTTAB(HT)"[214]OICE:"VN%+1"[144]" 240 GOSUB5000 250 GOSUB1000 255 IFRD=1THEN120 260 GETI$ 265 IFVAL(I$)>0ANDVAL(I$)<4THENVN%=VAL(I$)-1:GOTO120 266 IFI$="[198]"ORI$="F"THENGOSUB30000:GOTO120 267 IFI$=CHR$(13)THEN500 268 IFI$="[205]"ORI$="M"THENGOSUB36000:GOTO120 269 IFI$="?"ORI$="/"THENGOSUB40000:GOTO120 270 IFI$<>""THENGOSUB1500 300 GOTO250 350 A$=MID$(STR$(A),2):RETURN 360 NL=0:PRINT"[200]IT ANY KEY TO CONTINUE." 370 GETI$:IFI$=""THEN370 380 PRINT"[147]":RETURN 400 PRINTLEFT$("",V)SPC(H-1):RETURN 450 REM PRINT PROGRAM LINE 452 IFPR=0THENNL=NL+1:IFNL>10THENGOSUB360 455 A=LN:GOSUB350:PRINT#1,A$" "; 457 IFL1<0THEN480 460 PRINT#1,"POKE";:A=L1:GOSUB350:PRINT#1,A$","; 465 A=V1:GOSUB350:PRINT#1,A$":"; 470 IFL2>=0THENA=L2:GOSUB350:PRINT#1,"POKE"A$",";:A=V2:GOSUB350:PRINT#1,A$":"; 480 PRINT#1,"REM "R$:LN=LN+LI:RETURN 500 REM END 505 PRINT"[147]":INPUT"[209]UIT NOW";I$:IFLEFT$(I$,1)<>"[217]"ANDLEFT$(I$,1)<>"Y"THEN120 510 FORL=54272TO54296:POKEL,0:NEXT 520 PRINT:INPUT"[211]EE POKES TO MAKE SOUND";I$ 530 IFLEFT$(I$,1)="[206]"ORLEFT$(I$,1)="N"THEN900 532 PRINT:PRINT"[207]UTPUT TO ([211])CREEN, ([208])RINTER, OR":INPUT"([212])EXT FILE";I$:I$=LEFT$(I$,1) 533 PR=-1:IFI$="[208]"ORI$="P"THENPR=1 534 IFI$="[212]"ORI$="T"THENPR=2:GOSUB1900 535 IFI$="[211]"ORI$="S"THENPR=0 536 IFPR=-1THEN532 537 IFPR=1THENOPEN1,4,7 538 IFPR=0THENOPEN1,3,7 539 PRINT"[147]" 555 NL=0 560 PRINT#1,"10 REM CLEAR SOUND CHIP" 570 PRINT#1,"20 FORL=54272TO54296:POKEL,0:NEXT" 580 PRINT#1,"30 REM SET UP REGISTERS FOR SOUND" 585 LN=40:LI=10 590 L1=54296:V1=V%+16*LP%+32*BP%+64*HP%+128*O3%:R$="MODE/VOL":L2=-1:GOSUB450 610 IFF1%+F2%+F3%+EF%>0THENGOSUB800 615 A=0:FORV=0TO2:IFWF%(V)/2<>INT(WF%(V)/2)THENA=1 617 NEXT:IFA=0THENWF%(0)=WF%(0)+1 620 FORV=0TO2 622 A=V+1:IFA>2THENA=0 625 IF(WF%(V)/2=INT(WF%(V)/2))ANDNOT((RM%(A)=1)OR(SY%(A)=1))THEN680 630 L1=-1:R$="VOICE"+STR$(V+1):GOSUB450 640 L1=54273+7*V:V1=T1%(V):L2=54272+7*V:V2=T2%(V):R$="PITCH":GOSUB450 650 L1=54277+7*V:V1=AD%(V):L2=54278+7*V:V2=SR%(V):R$="ADSR":GOSUB450 660 L1=54276+7*V:V1=2*INT(WF%(V)/2):L2=-1:R$="WAVEFORM":GOSUB450 670 IFPU%(V)THENL1=54275+7*V:V1=P1%(V):L2=54274+7*V:V2=P2%(V) 675 IFPU%(V)THENR$="PW":GOSUB450 680 NEXT 690 L1=-1:R$="NOW START THE TONE!":GOSUB450 695 PRINT#1,MID$(STR$(LN),2)" "; 700 FORV=0TO2 710 IFWF%(V)/2<>INT(WF%(V)/2)THENA=54276+7*V:GOSUB350:PRINT#1,"POKE"A$","; 715 IFWF%(V)/2<>INT(WF%(V)/2)THENA=WF%(V):GOSUB350:PRINT#1,A$":"; 720 NEXT:PRINT#1,"REM START":LN=LN+LI 730 PRINT#1,MID$(STR$(LN),2)" FORA=1TO800:NEXT:REM LENGTH OF TONE":LN=LN+LI 745 PRINT#1,MID$(STR$(LN),2)" "; 750 FORV=0TO2 760 IFWF%(V)/2<>INT(WF%(V)/2)THENA=54276+7*V:GOSUB350:PRINT#1,"POKE"A$","; 765 IFWF%(V)/2<>INT(WF%(V)/2)THENA=WF%(V)-1:GOSUB350:PRINT#1,A$":"; 770 NEXT:PRINT#1,"REM STOP":LN=LN+LI 772 IFPR<>2THENPRINT#1 775 CLOSE1 777 IFPR=2THENCLOSE15 780 PRINT"[200]IT ANY KEY TO CONTINUE." 790 GETI$:IFI$=""THEN790 795 GOTO900 800 REM FILTER 810 L1=54295:V1=F1%+F2%*2+F3%*4+EF%*8+RE%*16:L2=-1:R$="FILTER":GOSUB450 815 A=INT(CF%/8):B=CF%-8*A 820 L1=54294:V1=A:L2=54293:V2=B:R$="CUTOFF FREQUENCY":GOSUB450 830 RETURN 900 PRINT"[147]":I$="Y":INPUT"[212]RY ANOTHER SOUND";I$ 910 IFLEFT$(I$,1)<>"[206]"ANDLEFT$(I$,1)<>"N"THENRUN 920 PRINT"[194]YE.":GOTO63000:THIS IS FOR THE END 1000 REM READ JOYSTICK 1005 RD=0 1010 JV=PEEK(56320) 1020 FR=JVAND16 1030 JV=15-(JVAND15) 1040 IF(JVAND1)ORI$="[145]"THENGOSUB2000 1050 IF(JVAND2)ORI$=""THENGOSUB3000 1060 IF(JVAND4)ORI$="[157]"THENGOSUB1200 1070 IF(JVAND8)ORI$=""THENGOSUB1300 1080 IFFR=0ANDBK=0THENBK=1:GOSUB4000 1090 IFFR<>0THENBK=0 1100 RETURN 1200 ONM%GOSUB10000,12000,14000,16000,18000,20000,22000,24000,26000:RETURN 1300 ONM%GOSUB11000,13000,15000,17000,19000,21000,22000,25000,27000:RETURN 1500 REM KEYBOARD 1502 IFI$="0"THENH=HT+4:V=22:GOSUB400:PRINT"[211]OUND OFF" 1505 IFI$="0"THENFORV=0TO2:WF%(V)=2*INT(WF%(V)/2):POKE54276+7*V,WF%(V):NEXT:RETURN 1507 IFI$=" "THENGOSUB4000 1515 IFI$<"[133]"ORI$>"[140]"THENRETURN 1520 IFI$="[133]"THENPI%=1 1530 IFI$="[137]"THENPI%=2 1540 IFI$="[134]"THENPI%=4 1550 IFI$="[138]"THENPI%=8 1560 IFI$="[135]"THENPI%=16 1570 IFI$="[139]"THENPI%=32 1580 IFI$="[136]"THENPI%=64 1590 IFI$="[140]"THENPI%=128 1600 RETURN 1900 REM OPEN TEXTFILE 1910 PRINT:F$="":INPUT"[198]ILENAME";F$ 1920 IFF$=""THEN1910 1930 OPEN15,8,15,"S0:"+F$ 1940 OPEN1,8,1,F$+",S,W" 1950 RETURN 2000 REM MOVE UP 2010 GOSUB5500 2020 M%=M%-1:IFM%=0THENM%=9 2030 GOSUB5000 2040 RETURN 3000 REM MOVE DOWN 3010 GOSUB5500 3020 M%=M%+1:IFM%=10THENM%=1 3030 GOSUB5000 3040 RETURN 4000 REM ON/OFF 4010 IFWF%(VN%)/2=INT(WF%(VN%)/2)THEN4100 4020 WF%(VN%)=WF%(VN%)-1:H=HT+4:V=22:GOSUB400:PRINT"[211]OUND OFF":GOTO4030 4030 POKE54276+7*VN%,WF%(VN%) 4040 RETURN 4100 WF%(VN%)=WF%(VN%)+1:H=HT+4:V=22:GOSUB400:PRINT"[211]OUND ON ":GOTO4030 5000 REM PLOT 'CURSOR' 5010 V=2*M%+2:H=HT-1:GOSUB400:PRINT">[144]":RETURN 5500 REM UNPLOT 'CURSOR' 5510 V=2*M%+2:H=HT-1:GOSUB400:PRINT" ":RETURN 10000 REM LOWER COARSE TUNE 10010 T1%(VN%)=T1%(VN%)-1:IFT1%(VN%)<0THENT1%(VN%)=255 10020 POKE54273+7*VN%,T1%(VN%) 10040 V=4:H=HT+13:GOSUB400:PRINTT1%(VN%)"[157] " 10050 RETURN 11000 REM RAISE COARSE TUNE 11010 T1%(VN%)=T1%(VN%)+1:IFT1%(VN%)>255THENT1%(VN%)=0 11020 POKE54273+7*VN%,T1%(VN%) 11030 V=4:H=HT+13:GOSUB400:PRINTT1%(VN%)"[157] " 11040 RETURN 12000 REM LOWER FINE TUNE 12010 T2%(VN%)=T2%(VN%)-1:IFT2%(VN%)<0THENT2%(VN%)=255 12020 POKE54272+7*VN%,T2%(VN%) 12030 V=6:H=HT+11:GOSUB400:PRINTT2%(VN%)"[157] " 12040 RETURN 13000 REM RAISE FINE TUNE 13010 T2%(VN%)=T2%(VN%)+1:IFT2%(VN%)>255THENT2%(VN%)=0 13020 POKE54272+7*VN%,T2%(VN%) 13030 V=6:H=HT+11:GOSUB400:PRINTT2%(VN%)"[157] " 13040 RETURN 14000 REM LOWER ATTACK 14010 A%(VN%)=A%(VN%)-1:IFA%(VN%)<0THENA%(VN%)=15 14020 AD%(VN%)=16*A%(VN%)+D%(VN%):POKE54277+7*VN%,AD%(VN%) 14030 V=8:H=HT+8:GOSUB400:PRINTA%(VN%)"[157] " 14040 RETURN 15000 REM RAISE ATTACK 15010 A%(VN%)=A%(VN%)+1:IFA%(VN%)>15THENA%(VN%)=0 15020 AD%(VN%)=16*A%(VN%)+D%(VN%):POKE54277+7*VN%,AD%(VN%) 15030 V=8:H=HT+8:GOSUB400:PRINTA%(VN%)"[157] " 15040 RETURN 16000 REM LOWER DECAY 16010 D%(VN%)=D%(VN%)-1:IFD%(VN%)<0THEND%(VN%)=15 16020 AD%(VN%)=16*A%(VN%)+D%(VN%):POKE54277+7*VN%,AD%(VN%) 16030 V=10:H=HT+7:GOSUB400:PRINTD%(VN%)"[157] " 16040 RETURN 17000 REM RAISE DECAY 17010 D%(VN%)=D%(VN%)+1:IFD%(VN%)>15THEND%(VN%)=0 17020 AD%(VN%)=16*A%(VN%)+D%(VN%):POKE54277+7*VN%,AD%(VN%) 17030 V=10:H=HT+7:GOSUB400:PRINTD%(VN%)"[157] " 17040 RETURN 18000 REM LOWER SUSTAIN 18010 S%(VN%)=S%(VN%)-1:IFS%(VN%)<0THENS%(VN%)=15 18020 SR%(VN%)=16*S%(VN%)+R%(VN%):POKE54278+7*VN%,SR%(VN%) 18030 V=12:H=HT+9:GOSUB400:PRINTS%(VN%)"[157] " 18040 RETURN 19000 REM RAISE SUSTAIN 19010 S%(VN%)=S%(VN%)+1:IFS%(VN%)>15THENS%(VN%)=0 19020 SR%(VN%)=16*S%(VN%)+R%(VN%):POKE54278+7*VN%,SR%(VN%) 19030 V=12:H=HT+9:GOSUB400:PRINTS%(VN%)"[157] " 19040 RETURN 20000 REM LOWER RELEASE 20010 R%(VN%)=R%(VN%)-1:IFR%(VN%)<0THENR%(VN%)=15 20020 SR%(VN%)=16*S%(VN%)+R%(VN%):POKE54278+7*VN%,SR%(VN%) 20030 V=14:H=HT+9:GOSUB400:PRINTR%(VN%)"[157] " 20040 RETURN 21000 REM RAISE RELEASE 21010 R%(VN%)=R%(VN%)+1:IFR%(VN%)>15THENR%(VN%)=0 21020 SR%(VN%)=16*S%(VN%)+R%(VN%):POKE54278+7*VN%,SR%(VN%) 21030 V=14:H=HT+9:GOSUB400:PRINTR%(VN%)"[157] " 21040 RETURN 22000 REM WAVEFORM 22005 WP%=1 22010 PRINT"[147][156][157][157][157][157][157][157][157][157][157][157][157][157][198]=[198]ILTER[157][157][157][157][157][157][157][157][205]=[205]ISC.[157][157][157][157][157][157][157][210][197][212][213][210][206]=[194]ACK"; 22012 PRINT"[157][157][157][157][157][157][157][157][157][157]TO MAIN[157][157][157][157][157][157][157]SELECTIONS[157][157][157][157][157][157][157][157][157][157][157]?=[201]NFO[144]" 22015 PRINT""TAB(HT-2)"[214]OICE"VN%+1"[215]AVEFORM:[144]" 22020 PRINT""TAB(HT)"[212]RIANGLE: ";OO$(TR%(VN%)) 22030 PRINT""TAB(HT)"[211]AWTOOTH: ";OO$(ST%(VN%)) 22040 PRINT""TAB(HT)"[208]ULSE: ";OO$(PU%(VN%)) 22050 PRINT""TAB(HT)"[206]OISE: ";OO$(NO%(VN%)) 22051 PRINT""TAB(HT)"[210]ING [205]OD: ";OO$(RM%(VN%)) 22052 PRINT""TAB(HT)"[211]YNC: ";OO$(SY%(VN%)) 22053 PRINT""TAB(HT)"[212]EST: ";OO$(TE%(VN%)) 22054 PRINT""TAB(HT)"[210]ETURN TO [205]AIN [211]ELECTIONS[144]" 22056 PRINTTAB(HT+3)"[211]OUND ";:IFWF%(VN%)/2=INT(WF%(VN%)/2)THENPRINT"OFF" 22058 IFWF%(VN%)/2<>INT(WF%(VN%)/2)THENPRINT"ON" 22059 PRINT""TAB(HT)"[156][215]AVEFORM #"2*INT(WF%(VN%)/2)"[144]" 22060 GOSUB23100 22100 REM LOOP 22110 JV=PEEK(56320) 22115 GETI$ 22117 IFI$<>""THENGOSUB1500 22120 FR=JVAND16 22130 JV=15-(JVAND15) 22135 IF((JVAND4)OR(JVAND8)ORI$=""ORI$="[157]")ANDWP%=8THENI$="":RD=1:RETURN 22140 IF(JVAND1)ORI$="[145]"THENGOSUB23000 22150 IF(JVAND2)ORI$=""THENGOSUB23200 22160 IF(JVAND4)ORI$="[157]"THENGOSUB23500 22170 IF(JVAND8)ORI$=""THENGOSUB23400 22180 IFFR=0ANDBK=0THENBK=1:GOSUB4000 22190 IFFR<>0THENBK=0 22200 IFI$=CHR$(13)THENI$="":RD=1:RETURN 22202 IFI$="?"ORI$="/"THENGOSUB44000:GOTO22010 22205 IFVAL(I$)>0ANDVAL(I$)<4THENVN%=VAL(I$)-1:GOTO22010 22207 IFI$="F"ORI$="[198]"THENGOSUB30000:GOTO22010 22208 IFI$="[205]"ORI$="M"THENGOSUB36000:GOTO22010 22210 GOTO22100 23000 REM MOVE WF PTR UP 23010 GOSUB23150 23020 WP%=WP%-1:IFWP%<1THENWP%=8 23030 GOSUB23100 23040 RETURN 23100 V=2*WP%+2:H=HT-1:GOSUB400:PRINT">[144]":RETURN 23150 V=2*WP%+2:H=HT-1:GOSUB400:PRINT" ":RETURN 23200 REM MOVE WF PTR DOWN 23210 GOSUB23150 23220 WP%=WP%+1:IFWP%>8THENWP%=1 23230 GOSUB23100 23240 RETURN 23400 REM TURN ON WAVEFORM 23410 ONWP%GOSUB23420,23430,23440,23450,23460,23470,23480 23412 O%=-NOT(INT(WF%(VN%)/2)=WF%(VN%)/2) 23414 WF%(VN%)=128*NO%(VN%)+64*PU%(VN%)+32*ST%(VN%)+16*TR%(VN%)+O% 23415 WF%(VN%)=WF%(VN%)+8*TE%(VN%)+4*RM%(VN%)+2*SY%(VN%) 23416 POKE54276+7*VN%,WF%(VN%):GOSUB23495:RETURN 23420 TR%(VN%)=1:V=4:H=HT+11:GOSUB400:PRINT"ON ":GOSUB23550:RETURN 23430 ST%(VN%)=1:V=6:H=HT+11:GOSUB400:PRINT"ON ":GOSUB23550:RETURN 23440 PU%(VN%)=1:V=8:H=HT+8:GOSUB400:PRINT"ON ":GOSUB23550:RETURN 23450 NO%(VN%)=1:V=10:H=HT+8:GOSUB400:PRINT"ON ":GOSUB23490:RETURN 23460 RM%(VN%)=1:V=12:H=HT+11:GOSUB400:PRINT"ON ":RETURN 23470 SY%(VN%)=1:V=14:H=HT+7:GOSUB400:PRINT"ON ":RETURN 23480 TE%(VN%)=1:V=16:H=HT+7:GOSUB400:PRINT"ON ":RETURN 23490 GOSUB23520:GOSUB23530:GOSUB23540:RETURN 23495 H=HT+11:V=24:GOSUB400:PRINT"[156]"WF%(VN%)"[157] [144]":RETURN 23500 REM TURN OFF WAVEFORM 23510 ONWP%GOSUB23520,23530,23540,23550,23560,23570,23580 23512 O%=-NOT(INT(WF%(VN%)/2)=WF%(VN%)/2) 23514 WF%(VN%)=128*NO%(VN%)+64*PU%(VN%)+32*ST%(VN%)+16*TR%(VN%)+O% 23515 WF%(VN%)=WF%(VN%)+8*TE%(VN%)+4*RM%(VN%)+2*SY%(VN%) 23516 POKE54276+7*VN%,WF%(VN%):GOSUB23495:RETURN 23520 TR%(VN%)=0:V=4:H=HT+11:GOSUB400:PRINT"OFF":RETURN 23530 ST%(VN%)=0:V=6:H=HT+11:GOSUB400:PRINT"OFF":RETURN 23540 PU%(VN%)=0:V=8:H=HT+8:GOSUB400:PRINT"OFF":RETURN 23550 NO%(VN%)=0:V=10:H=HT+8:GOSUB400:PRINT"OFF":RETURN 23560 RM%(VN%)=0:V=12:H=HT+11:GOSUB400:PRINT"OFF":RETURN 23570 SY%(VN%)=0:V=14:H=HT+7:GOSUB400:PRINT"OFF":RETURN 23580 TE%(VN%)=0:V=16:H=HT+7:GOSUB400:PRINT"OFF":RETURN 24000 REM LOWER PULSEWIDTH 24010 PW%(VN%)=PW%(VN%)-PI%:IFPW%(VN%)<0THENPW%(VN%)=PW%(VN%)+4096 24015 P1%(VN%)=INT(PW%(VN%)/256):P2%(VN%)=PW%(VN%)-256*P1%(VN%) 24020 POKE54274+7*VN%,P2%(VN%):POKE54275+7*VN%,P1%(VN%) 24030 V=18:H=HT+13:GOSUB400:PRINTPW%(VN%)"[157] " 24040 RETURN 25000 REM RAISE PULSEWIDTH 25010 PW%(VN%)=PW%(VN%)+PI%:IFPW%(VN%)>4095THENPW%(VN%)=PW%(VN%)-4096 25015 P1%(VN%)=INT(PW%(VN%)/256):P2%(VN%)=PW%(VN%)-256*P1%(VN%) 25020 POKE54275+7*VN%,P1%(VN%):POKE54274+7*VN%,P2%(VN%) 25030 V=18:H=HT+13:GOSUB400:PRINTPW%(VN%)"[157] " 25040 RETURN 26000 REM LOWER VOLUME 26010 V%=V%-1:IFV%<0THENV%=15 26020 POKE54296,V%+16*LP%+32*BP%+64*HP%+128*O3% 26030 V=20:H=HT+8:GOSUB400:PRINTV%"[157] " 26040 RETURN 27000 REM RAISE VOLUME 27010 V%=V%+1:IFV%>15THENV%=0 27020 POKE54296,V%+16*LP%+32*BP%+64*HP%+128*O3% 27030 V=20:H=HT+8:GOSUB400:PRINTV%"[157] " 27040 RETURN 29999 RETURN 30000 REM FILTER 30005 FP%=1 30010 PRINT"[147][156][157][157][157][157][157][157][157][157][157][157][157][157][210][197][212][213][210][206]=[194]ACK" 30012 PRINT"[157][157][157][157][157][157][157][157][157][157][157][157]TO PREVIOUS[157][157][157][157][157][157][157][157][157][157][157]SELECTIONS[157][157][157][157][157][157][157][157][157][157]?=[201]NFO[144]" 30015 PRINT""TAB(HT-3)"[198]ILTER CONTROLS:[144]" 30020 PRINT""TAB(HT)"[195]UTOFF [198]REQUENCY:"CF% 30030 PRINT""TAB(HT)"[210]ESONANCE:"RE% 30040 PRINT""TAB(HT)"[214]OICE 1 [198]ILTER: "OO$(F1%) 30050 PRINT""TAB(HT)"[214]OICE 2 [198]ILTER: "OO$(F2%) 30060 PRINT""TAB(HT)"[214]OICE 3 [198]ILTER: "OO$(F3%) 30070 PRINT""TAB(HT)"[204]OW [208]ASS: "OO$(LP%) 30080 PRINT""TAB(HT)"[194]ANDPASS: "OO$(BP%) 30090 PRINT""TAB(HT)"[200]IGH [208]ASS: "OO$(HP%) 30100 PRINT""TAB(HT)"[214]OICE 3 [207]FF: "OO$(O3%) 30105 PRINT 30110 PRINTTAB(HT+3)"[211]OUND ";:IFWF%(VN%)/2=INT(WF%(VN%)/2)THENPRINT"OFF" 30120 IFWF%(VN%)/2<>INT(WF%(VN%)/2)THENPRINT"ON" 30125 PRINT""TAB(HT)"[214]OICE:"VN%+1 30130 GOSUB31000 30140 REM LOOP 30150 JV=PEEK(56320) 30160 GETI$ 30170 IFI$<>""THENGOSUB1500 30180 FR=JVAND16 30190 JV=15-(JVAND15) 30210 IF(JVAND1)ORI$="[145]"THENGOSUB32000 30220 IF(JVAND2)ORI$=""THENGOSUB33000 30230 IF(JVAND4)ORI$="[157]"THENGOSUB34000 30240 IF(JVAND8)ORI$=""THENGOSUB35000 30250 IFFR=0ANDBK=0THENBK=1:GOSUB4000 30260 IFFR<>0THENBK=0 30270 IFI$=CHR$(13)THENI$="":RD=1:RETURN 30275 IFI$="?"ORI$="/"THENGOSUB49000:GOTO30010 30280 IFVAL(I$)>0ANDVAL(I$)<4THENVN%=VAL(I$)-1:GOTO30010 30290 GOTO30140 31000 V=2*FP%+2:H=HT-1:GOSUB400:PRINT">[144]":RETURN 31050 V=2*FP%+2:H=HT-1:GOSUB400:PRINT" ":RETURN 32000 REM MOVE FILTER PTR UP 32010 GOSUB31050 32020 FP%=FP%-1:IFFP%<1THENFP%=9 32030 GOSUB31000 32040 RETURN 33000 REM MOVE FILTER PTR DOWN 33010 GOSUB31050 33020 FP%=FP%+1:IFFP%>9THENFP%=1 33030 GOSUB31000 33040 RETURN 34000 REM LOWER QUANTITY 34010 ONFP%GOSUB34100,34200,34300,34400,34500,34600,34700,34800,34900 34020 POKE54296,V%+16*LP%+32*BP%+64*HP%+128*O3% 34030 POKE54295,F1%+2*F2%+4*F3%+8*EF%+16*RE% 34040 A=INT(CF%/8):B=CF%-8*A:POKE54294,A:POKE54293,B 34050 RETURN 34100 CF%=CF%-PI%:IFCF%<0THENCF%=CF%+2048 34110 V=4:H=HT+18:GOSUB400:PRINTCF%"[157] " 34120 RETURN 34200 RE%=RE%-1:IFRE%<0THENRE%=15 34210 V=6:H=HT+11:GOSUB400:PRINTRE%"[157] " 34220 RETURN 34300 F1%=0:V=8:H=HT+17:GOSUB400:PRINT"OFF":RETURN 34400 F2%=0:V=10:H=HT+17:GOSUB400:PRINT"OFF":RETURN 34500 F3%=0:V=12:H=HT+17:GOSUB400:PRINT"OFF":RETURN 34600 LP%=0:V=14:H=HT+11:GOSUB400:PRINT"OFF":RETURN 34700 BP%=0:V=16:H=HT+11:GOSUB400:PRINT"OFF":RETURN 34800 HP%=0:V=18:H=HT+12:GOSUB400:PRINT"OFF":RETURN 34900 O3%=0:V=20:H=HT+14:GOSUB400:PRINT"OFF":RETURN 35000 REM RAISE QUANTITY 35010 ONFP%GOSUB35100,35200,35300,35400,35500,35600,35700,35800,35900 35020 POKE54296,V%+16*LP%+32*BP%+64*HP%+128*O3% 35030 POKE54295,F1%+2*F2%+4*F3%+16*RE% 35040 A=INT(CF%/8):B=CF%-8*A:POKE54294,A:POKE54293,B 35050 RETURN 35100 CF%=CF%+PI%:IFCF%>2047THENCF%=CF%-2048 35110 V=4:H=HT+18:GOSUB400:PRINTCF%"[157] " 35120 RETURN 35200 RE%=RE%+1:IFRE%>15THENRE%=0 35210 V=6:H=HT+11:GOSUB400:PRINTRE%"[157] " 35220 RETURN 35300 F1%=1:V=8:H=HT+17:GOSUB400:PRINT"ON ":RETURN 35400 F2%=1:V=10:H=HT+17:GOSUB400:PRINT"ON ":RETURN 35500 F3%=1:V=12:H=HT+17:GOSUB400:PRINT"ON ":RETURN 35600 LP%=1:V=14:H=HT+11:GOSUB400:PRINT"ON ":RETURN 35700 BP%=1:V=16:H=HT+11:GOSUB400:PRINT"ON ":RETURN 35800 HP%=1:V=18:H=HT+12:GOSUB400:PRINT"ON ":RETURN 35900 O3%=1:V=20:H=HT+14:GOSUB400:PRINT"ON ":RETURN 35999 RETURN 36000 REM MISC. 36010 PRINT"[147][156][157][157][157][157][157][157][157][157][157][157][157][157][210][197][212][213][210][206]=[194]ACK" 36012 PRINT"[157][157][157][157][157][157][157][157][157][157][157][157]TO PREVIOUS[157][157][157][157][157][157][157][157][157][157][157]SELECTIONS[157][157][157][157][157][157][157][157][157][157]?=[201]NFO[144]" 36015 PRINT""TAB(HT-2)"[205]ISCELLANEOUS [210]EGISTERS:[144]" 36020 PRINT""TAB(HT-2)">[144] [198]ILTER [197]XT. [201]NPUT: ";OO$(EF%) 36025 PRINT"=======================================" 36030 PRINTTAB(HT-2)"[156][210]EAD-[207]NLY [210]EGISTERS:[144]" 36040 PRINT""TAB(HT)"[208]OT. [216]:";PEEK(54297)"[157] " 36050 PRINT""TAB(HT)"[208]OT. [217]:";PEEK(54298)"[157] " 36060 PRINT""TAB(HT)"[207]SCILLATOR 3:";PEEK(54299);"[157] " 36070 PRINT""TAB(HT)"[197]NVELOPE 3:";PEEK(54300)"[157] " 36080 PRINT"" 36085 PRINTTAB(HT+3)"[211]OUND ";:IFWF%(VN%)/2=INT(WF%(VN%)/2)THENPRINT"OFF" 36090 IFWF%(VN%)/2<>INT(WF%(VN%)/2)THENPRINT"ON" 36095 PRINT""TAB(HT)"[214]OICE:"VN%+1"[144]" 36100 REM LOOP 36110 JV=PEEK(56320) 36120 GETI$ 36130 IFI$<>""THENGOSUB1500 36133 FR=JVAND16 36136 JV=15-(JVAND15) 36140 IF(JVAND4)ORI$="[157]"THENGOSUB37200 36144 IF(JVAND8)ORI$=""THENGOSUB37300 36145 IFFR=0ANDBK=0THENBK=1:GOSUB4000 36146 IFFR<>0THENBK=0 36147 IFI$="?"ORI$="/"THENGOSUB50100:GOTO36000 36148 IFI$=CHR$(13)THENI$="":RD=1:RETURN 36149 IFVAL(I$)>0ANDVAL(I$)<4THENVN%=VAL(I$)-1:GOTO36000 36150 H=HT+8:V=8:GOSUB400:PRINTPEEK(54297)"[157] " 36160 V=10:H=HT+8:GOSUB400:PRINTPEEK(54298)"[157] " 36170 V=12:H=HT+14:GOSUB400:PRINTPEEK(54299)"[157] " 36180 V=14:H=HT+12:GOSUB400:PRINTPEEK(54300)"[157] " 36190 GOTO36100 37200 REM TURN OFF EXT. FILTER 37210 EF%=0:V=4:H=HT+20:GOSUB400:PRINT"OFF" 37220 POKE54295,F1%+2*F2%+4*F3%+8*EF%+16*RE% 37230 RETURN 37300 REM TURN ON EXT. FILTER 37310 EF%=1:V=4:H=HT+20:GOSUB400:PRINT"ON " 37320 POKE54295,F1%+2*F2%+4*F3%+8*EF%+16*RE% 37330 RETURN 40000 REM HELP 40010 ONM%GOSUB40100,40100,40500,41000,41500,42000,42500,43000,43500,44000 40020 PRINT"[200]IT ANY KEY TO RETURN TO MAIN PROGRAM." 40030 GETI$:IFI$=""THEN40030 40040 RETURN 40100 PRINT"[147][195]OARSE [212]UNE AND [198]INE [212]UNE:" 40110 PRINT"[212]HESE SETTINGS ADJUST THE PITCH OF THE" 40115 PRINT"NOTE YOU ARE PLAYING. [212]HE [195]OARSE [212]UNE" 40120 PRINT"CONTROL MAKES LARGE ADJUSTMENTS IN THE" 40130 PRINT"PITCH, AND THE FINE TUNE CONTROL MAKES" 40140 PRINT"SMALL ADJUSTMENTS." 40145 PRINT"[200]IT ANY KEY TO CONTINUE." 40147 GETI$:IFI$=""THEN40147 40150 PRINT"[147][212]HE TOTAL PITCH EQUALS THE [198]INE [212]UNE" 40160 PRINT"SETTING ADDED TO 256 TIMES THE [195]OARSE" 40170 PRINT"[212]UNE SETTING. [198]OR A STANDARD 1 [205][200]Z" 40180 PRINT"SYSTEM CLOCK, THE FREQUENCY IN [200]ERTZ" 40190 PRINT"CAN BE FOUND BY MULTIPLYING THIS BY" 40200 PRINT"0.059604645. [201]T IS PRESENTLY SET TO" 40210 PRINT"[157]"(T1%(VN%)*256+T2%(VN%))*0.059604645"[200]Z." 40220 RETURN 40500 PRINT"[147][193]TTACK:" 40510 PRINT"[212]HIS CONTROL DETERMINES THE LENGTH OF" 40520 PRINT"TIME IT TAKES FOR THE SOUND TO REACH" 40530 PRINT"PEAK VOLUME AFTER YOU START A NOTE." 40540 PRINT"[193]LONG WITH [196]ECAY, [211]USTAIN, AND [210]ELEASE," 40550 PRINT"IT IS USED TO DEFINE THE 'ENVELOPE' OF" 40560 PRINT"A TONE." 40570 RETURN 41000 PRINT"[147][196]ECAY:" 41010 PRINT"[212]HIS CONTROL DETERMINES THE LENGTH OF" 41020 PRINT"TIME IT TAKES FOR THE SOUND OUTPUT TO" 41030 PRINT"FALL FROM THE PEAK LEVEL TO THE [211]USTAIN" 41040 PRINT"LEVEL, WHERE IT REMAINS UNTIL THE NOTE" 41050 PRINT"IS RELEASED. [193]LONG WITH [193]TTACK," 41060 PRINT"[211]USTAIN, AND [210]ELEASE, IT IS USED TO" 41070 PRINT"DEFINE THE 'ENVELOPE' OF A TONE." 41080 RETURN 41500 PRINT"[147][211]USTAIN:" 41510 PRINT"[212]HIS CONTROL DETERMINES THE VOLUME AT" 41520 PRINT"WHICH A TONE WILL REMAIN AFTER THE" 41530 PRINT"[196]ECAY CYCLE IS COMPLETE, AND UNTIL" 41540 PRINT"THE NOTE IS RELEASED. [198]OR EXAMPLE, IF" 41550 PRINT"[211]USTAIN IS SET TO 15, THE TONE WILL" 41560 PRINT"STAY AT FULL VOLUME; IF [211]USTAIN IS SET" 41570 PRINT"TO 8, IT WOULD DROP TO HALF VOLUME" 41580 PRINT"DURING THE [196]ECAY CYCLE, AND STAY THERE." 41583 PRINT"[200]IT ANY KEY TO CONTINUE." 41586 GETI$:IFI$=""THEN41586 41590 PRINT"[147][193]LONG WITH [193]TTACK, [196]ECAY, AND [210]ELEASE," 41600 PRINT"IT IS USED TO DEFINE THE 'ENVELOPE'" 41610 PRINT"OF A TONE." 41620 RETURN 42000 PRINT"[147][210]ELEASE:" 42010 PRINT"[212]HIS CONTROL DETERMINES THE RATE AT" 42020 PRINT"WHICH THE TONE WILL DECREASE IN VOLUME" 42030 PRINT"AFTER IT IS TURNED OFF. [201]T WILL GO" 42040 PRINT"FROM THE [211]USTAIN LEVEL DOWN TO ZERO." 42050 PRINT"[193]LONG WITH [193]TTACK, [196]ECAY, AND [211]USTAIN," 42060 PRINT"IT IS USED TO DEFINE THE 'ENVELOPE'" 42070 PRINT"OF A TONE." 42080 RETURN 42500 PRINT"[147][215]AVEFORM:" 42510 PRINT"[212]HIS DETERMINES HOW YOUR TONE WILL" 42520 PRINT"SOUND. [212]HIS IS A SPECIAL CONTROL, SO" 42530 PRINT"INSTEAD OF SIMPLY INCREMENTING OR" 42540 PRINT"DECREMENTING A NUMBER, WHEN YOU PUT THE" 42550 PRINT"CURSOR ON THIS ITEM AND MOVE THE JOY-" 42560 PRINT"STICK TO THE LEFT OR RIGHT (OR PRESS" 42570 PRINT"THE [195]RSR [204]EFT OR [195]RSR [210]IGHT KEY) YOU" 42580 PRINT"WILL BE PLACED IN A SPECIAL MENU." 42590 PRINT"[200]IT ANY KEY TO CONTINUE." 42600 GETI$:IFI$=""THEN42600 42610 PRINT"[147]" 42620 PRINT"[215]ITHIN THIS MENU YOU CAN TURN ON OR OFF" 42630 PRINT"VARIOUS WAVEFORMS AND OTHER SWITCHES." 42640 PRINT"[213]SE THE HELP FEATURE WITHIN THIS MENU" 42650 PRINT"FOR DETAILS ABOUT INDIVIDUAL WAVEFORMS." 42660 PRINT"[217]OU CAN TURN ON MORE THAN ONE WAVEFORM" 42670 PRINT"AT ONCE FOR UNUSUAL EFFECTS." 42680 RETURN 43000 PRINT"[147][208]ULSEWIDTH:" 43010 PRINT"[212]HIS PARAMETER ONLY HAS EFFECT WHEN THE" 43020 PRINT"[208]ULSE WAVEFORM IS SELECTED. ([211]EE HELP" 43030 PRINT"SECTIONS ON [215]AVEFORMS.) [201]T DETERMINES" 43040 PRINT"THE WIDTH OF A PULSE IN THIS WAVEFORM." 43050 PRINT"[212]HE PERCENTAGE OF A CYCLE THE PULSE" 43060 PRINT"TAKES CAN BE CALCULATED BY DIVIDING" 43070 PRINT"THIS NUMBER BY 40.95. [201]T IS PRESENTLY" 43080 PRINT"AT"PW%(VN%)/40.95"%." 43090 PRINT"[200]IT ANY KEY TO CONTINUE." 43100 GETI$:IFI$=""THEN43100 43110 PRINT"[147]" 43120 PRINT"[211]INCE THIS PARAMETER HAS A WIDE RANGE" 43130 PRINT"(0-4095), YOU CAN ADJUST THE RATE AT" 43140 PRINT"WHICH IT STEPS UP OR DOWN BY PRESSING" 43150 PRINT"THE FUNCTION KEYS. [198]1 SETS THE STEP" 43160 PRINT"INCREMENT TO 1, [198]8 SETS IT TO 128, AND" 43170 PRINT"THE OTHER FUNCTION KEYS SET IT TO VALUES" 43180 PRINT"IN BETWEEN." 43190 RETURN 43500 PRINT"[147][214]OLUME:" 43510 PRINT"[212]HIS PARAMETER ADJUSTS HOW LOUD THE" 43520 PRINT"SOUND IS, ON A SCALE OF 0 TO 15." 43530 PRINT"[212]HERE IS ONLY ONE VOLUME SETTING, WHICH" 43540 PRINT"APPLIES TO ALL THREE VOICES. [212]HERE IS" 43550 PRINT"NO WAY TO ADJUST THE VOLUME OF ONE" 43560 PRINT"VOICE INDEPENDENTLY OF THE OTHERS." 43570 RETURN 44000 HK=1:ONWP%GOSUB44500,45000,45500,46000,46500,47000,47500,48000 44005 IFHK=0THENRETURN 44010 PRINT"[200]IT ANY KEY TO RETURN TO MAIN PROGRAM."; 44020 GETI$:IFI$=""THEN44020 44030 RETURN 44500 PRINT"[147][212]RIANGLE:" 44510 PRINT"[212]HIS WAVEFORM PRODUCES A SOUND LIKE THAT" 44520 PRINT"OF A FLUTE. [201]T GETS ITS NAME FROM THE" 44530 PRINT"TRIANGULAR SHAPE OF A GRAPH OF THE WAVE." 44550 PRINT"[200]IT ANY KEY TO SEE A SAMPLE GRAPH." 44560 GETI$:IFI$=""THEN44560 44570 PRINT"[147][142]" 44575 PRINT"GRAPH OF TRIANGLE WAVEFORM:" 44580 PRINT" [206][205] [206][205] [206][205] [206][205] [206][205] [206][205] [206][205] [206]" 44585 PRINT" [206] [205][206] [205][206] [205][206] [205][206] [205][206] [205][206] [205][206]" 44590 PRINT"HIT ANY KEY TO RETURN TO MAIN PROGRAM.":HK=0 44600 GETI$:IFI$=""THEN44600 44610 PRINT"[147]" 44620 RETURN 45000 PRINT"[147][211]AWTOOTH:" 45010 PRINT"[212]HIS WAVEFORM PRODUCES A BRASSY TONE." 45020 PRINT"[200]IT ANY KEY TO SEE A SAMPLE GRAPH." 45030 GETI$:IFI$=""THEN45030 45040 PRINT"[147][142]" 45050 PRINT"GRAPH OF SAWTOOTH WAVEFORM:" 45060 PRINT" [206][165][206][165][206][165][206][165][206][165][206][165][206][165][206][165][206][165][206][165][206][165][206][165][206][165]" 45070 PRINT " [206][167][206][167][206][167][206][167][206][167][206][167][206][167][206][167][206][167][206][167][206][167][206][167][206] [165]" 45080 PRINT"HIT ANY KEY TO RETURN TO MAIN PROGRAM.":HK=0 45090 GETI$:IFI$=""THEN45090 45100 PRINT"[147]":RETURN 45500 PRINT"[147][208]ULSE:" 45510 PRINT"[212]HIS IS A SQUARE WAVE. [201]TS EXACT SOUND" 45520 PRINT"DEPENDS ON THE SETTING OF THE [208]ULSE-" 45530 PRINT"WIDTH." 45540 PRINT"[200]IT ANY KEY TO SEE A SAMPLE GRAPH." 45550 GETI$:IFI$=""THEN45550 45560 PRINT"[147][142]" 45570 PRINT"GRAPH OF PULSE WAVEFORM:" 45580 PRINT" [207][208] [207][208] [207][208] [207][208] [207][208] [207][208] [207][208]" 45590 PRINT " [165][167][164][164][180][167][164][164][180][167][164][164][165][167][164][164][165][167][164][164][165][167][164][164][165][167]" 45600 PRINT"HIT ANY KEY TO RETURN TO MAIN PROGRAM.":HK=0 45610 GETI$:IFI$=""THEN45610 45620 PRINT"[147]":RETURN 46000 PRINT"[147][206]OISE:" 46010 PRINT"[212]HIS PRODUCES RANDOM 'WHITE NOISE'." 46020 PRINT"([212]HIS WAVEFORM CANNOT BE MIXED WITH" 46030 PRINT"ANY OF THE PRECEDING ONES. [201]F YOU TURN" 46040 PRINT"THIS ON, THIS PROGRAM WILL TURN THE" 46050 PRINT"OTHERS OFF. [201]F THE [206]OISE WAVEFORM WERE" 46060 PRINT"ALLOWED TO BE TURNED ON ALONG WITH" 46070 PRINT"ANOTHER WAVEFORM, IT MIGHT 'LOCK UP'" 46080 PRINT"THE CHIP, STOPPING SOUND OUTPUT UNTIL" 46090 PRINT"IT IS RESET BY SETTING THE [212]EST BIT.)" 46100 RETURN 46500 PRINT"[147][210]ING [205]OD:" 46505 A=VN%:IFA=0THENA=3 46510 PRINT"[201]F YOU TURN THIS ON, AND TURN ON THE" 46520 PRINT"[212]RIANGLE WAVEFORM, THE SOUND FOR THIS" 46530 PRINT"VOICE (VOICE"VN%+1"[157]) WILL BECOME A 'RING" 46540 PRINT"MODULATED' COMBINATION OF THE FREQUENCY" 46550 PRINT"OF THIS VOICE AND THAT OF VOICE"A"[157]." 46560 PRINT"[214]OICE"A"NEED NOT BE TURNED ON." 46570 PRINT"[212]HIS PRODUCES A BELL OR GONG-LIKE TONE." 46580 PRINT"[211]ET THE FREQUENCY OF VOICE"A"TO A" 46590 PRINT"NONZERO VALUE; ADJUSTING THIS VALUE" 46600 PRINT"PRODUCES DIFFERENT EFFECTS." 46610 RETURN 47000 PRINT"[147][211]YNC:" 47010 A=VN%:IFA=0THENA=3 47020 PRINT"[212]HIS CAUSES A 'HARD SYNC' EFFECT, IN" 47030 PRINT"WHICH THIS VOICE (VOICE"VN%+1"[157]) IS" 47040 PRINT"SYNCHRONIZED WITH THE OSCILLATOR OF" 47050 PRINT"VOICE"A"[157]. [212]HE FREQUENCY OF VOICE"A 47060 PRINT"SHOULD BE SET TO A NONZERO VALUE WHICH" 47070 PRINT"IS PREFERABLY LOWER THAN THAT OF VOICE" 47080 PRINT"[157]"VN%+1"[157]. [214]OICE"A"NEED NOT BE TURNED ON." 47090 RETURN 47500 PRINT"[147][212]EST:" 47510 PRINT"[215]HEN THIS IS ON, THIS VOICE IS LOCKED," 47520 PRINT"AND WILL NOT PRODUCE ANY SOUND. [212]URNING" 47530 PRINT"THIS ON AND THEN OFF WILL CLEAR AN ERROR" 47540 PRINT"CONDITION CAUSED BY SETTING THE NOISE" 47550 PRINT"WAVEFORM ALONG WITH ANOTHER WAVEFORM." 47560 PRINT"[200]OWEVER, SINCE THIS SITUATION IS BLOCKED" 47570 PRINT"BY THIS PROGRAM, THE [212]EST SWITCH DOES" 47580 PRINT"NOT HAVE ANY IMPORTANT USE HERE." 47590 RETURN 48000 PRINT"[147][210]ETURN TO [205]AIN [211]ELECTIONS:" 48010 PRINT"[205]OVING THE JOYSTICK TO THE LEFT OR" 48020 PRINT"RIGHT AT THIS POINT WOULD BRING YOU" 48030 PRINT"BACK TO THE MAIN SET OF PARAMETERS FOR" 48040 PRINT"THIS PROGRAM. [200]ITTING [210][197][212][213][210][206][146] WILL" 48050 PRINT"ALSO DO THIS." 48060 RETURN 49000 ONFP%GOSUB49200,49400,49600,49600,49600,49800,49800,49800,50000 49010 PRINT"[200]IT ANY KEY TO RETURN TO MAIN PROGRAM."; 49020 GETI$:IFI$=""THEN49020 49030 RETURN 49200 PRINT"[147][195]UTOFF [198]REQUENCY:" 49210 PRINT"[212]HIS CONTROLS THE CUTOFF (OR CENTER)" 49220 PRINT"FREQUENCY OF THE [198]ILTER. [204]OOK AT THE" 49230 PRINT"DESCRIPTIONS OF OTHER [198]ILTER PARAMETERS" 49240 PRINT"FOR MORE DETAILS ABOUT HOW THIS IS" 49250 PRINT"USED." 49260 PRINT"[211]INCE THIS HAS A WIDE RANGE, YOU CAN" 49270 PRINT"USE THE FUNCTION KEYS ([198]1 THROUGH [198]8)" 49280 PRINT"TO ADJUST THE STEP INCREMENT, LIKE" 49290 PRINT"WITH [208]ULSE [215]IDTH." 49300 RETURN 49400 PRINT"[147][210]ESONANCE:" 49410 PRINT"[212]HIS IS A NUMBER FROM 0 TO 15. [212]HE" 49420 PRINT"HIGHER THIS NUMBER, THE MORE THAT" 49430 PRINT"ELEMENTS OF THE FREQUENCY OF A TONE" 49440 PRINT"AT THE [195]UTOFF [198]REQUENCY WILL BE EMPH-" 49450 PRINT"ASIZED, FOR A SHARPER SOUND. [212]HIS ONLY" 49460 PRINT"HAS EFFECT IF THE FILTER IS TURNED ON" 49470 PRINT"USING THE SWITCHES BELOW." 49480 RETURN 49600 PRINT"[147][198]ILTER 1 THROUGH [198]ILTER 3:" 49610 PRINT"[212]URNS ON THE [198]ILTER FOR THE CORRESPOND-" 49620 PRINT"ING VOICE. [212]HIS MUST BE TURNED ON" 49630 PRINT"IN ORDER FOR ANY OF THE [198]ILTER PARAM-" 49640 PRINT"ETERS TO HAVE ANY EFFECT." 49650 RETURN 49800 PRINT"[147][204]OW-[208]ASS, [194]ANDPASS, [200]IGH-[208]ASS:" 49810 PRINT"[212]HESE DETERMINE WHICH MODE THE FILTER" 49820 PRINT"IS IN. [193]T LEAST ONE OF THESE MUST BE" 49830 PRINT"TURNED ON IF THE FILTER IS USED." 49840 PRINT"[204]OW-[208]ASS CAUSES FREQUENCY COMPONENTS" 49850 PRINT"BELOW THE [195]UTOFF [198]REQUENCY TO BE SENT" 49860 PRINT"UNCHANGED, WHILE HIGHER FREQUENCIES" 49870 PRINT"ARE FILTERED. [200]IGH-[208]ASS IS THE REVERSE," 49880 PRINT"FILTERING ONLY LOW FREQUENCIES. [194]AND-" 49890 PRINT"PASS FILTERING FILTERS EVERYTHING" 49900 PRINT"ABOVE OR BELOW THE [195]UTOFF." 49910 RETURN 50000 PRINT"[147]3-[207]FF:" 50010 PRINT"[215]HEN THIS IS TURNED ON, VOICE 3 IS" 50020 PRINT"DISCONNECTED, AND WILL NOT SOUND EVEN" 50030 PRINT"IF IT IS TURNED ON. [212]HIS IS USED TO" 50040 PRINT"PREVENT UNWANTED OUTPUT WHEN YOU ARE" 50050 PRINT"USING VOICE 3 FOR MODULATION, AS WITH" 50060 PRINT"THE [210]ING-[205]OD OR [211]YNC MODES." 50070 RETURN 50100 PRINT"[147][205]ISCELLANEOUS [210]EGISTERS:" 50110 PRINT"[197]XTERNAL [198]ILTER: [212]HIS DETERMINES IF" 50120 PRINT"THE [197]XTERNAL [193]UDIO [201]NPUT IS SENT THROUGH" 50130 PRINT"THE FILTER. [215]HEN TURNED ON IT SEEMS TO" 50140 PRINT"ELIMINATE SOME STATIC, SO IT MIGHT BE" 50150 PRINT"A GOOD IDEA TO TURN THIS ON." 50160 PRINT"[208]OT. [216] AND [208]OT. [217]: [212]HESE ARE TWO" 50170 PRINT"POTENTIOMETER INPUTS. [201]F YOU HAVE GAME" 50180 PRINT"PADDLES HOOKED UP, THEIR SETTINGS SHOULD" 50190 PRINT"SHOW UP HERE." 50200 PRINT"[200]IT ANY KEY TO CONTINUE."; 50210 GETI$:IFI$=""THEN50210 50220 PRINT"[147]" 50230 PRINT"[207]SCILLATOR 3, [197]NVELOPE 3: [212]HESE SHOW" 50240 PRINT"WHAT IS BEING OUTPUT THROUGH VOICE 3." 50245 PRINT"[212]HESE VALUES CHANGE SO RAPIDLY, YOU" 50250 PRINT"CAN ONLY GET A VAGUE IDEA OF WHAT IS" 50255 PRINT"HAPPENING FROM LOOKING AT THESE NUMBERS." 50260 PRINT"[200]IT ANY KEY TO RETURN TO MAIN PROGRAM." 50270 GETI$:IFI$=""THEN50270 50280 RETURN 51000 REM TITLE/INSTRUCTIONS 51010 PRINT"[147]" 51020 PRINT"[195]-64 [211]OUND [199]ENERATOR - [194]Y [196]ANIEL [212]OBIAS" 51030 PRINT"[195]OPYRIGHT ([195])[160]1984. [193]LL [210]IGHTS [210]ESERVED[144]" 51040 I$="":INPUT"[201]NSTRUCTIONS";I$ 51050 IFLEFT$(I$,1)<>"[217]"ANDLEFT$(I$,1)<>"Y"THENRETURN 51060 REM INSTRUCTIONS 51070 PRINT"[147]" 51080 PRINT"[212]HIS PROGRAM HELPS YOU EXPERIMENT WITH" 51090 PRINT"DIFFERENT SOUNDS YOUR [195]-64 CAN PRODUCE." 51100 PRINT"[217]OU CAN ADJUST ALL PARAMETERS OF THE" 51110 PRINT"[211][201][196] CHIP, WHICH PRODUCES THE [195]-64'S" 51120 PRINT"SOUND." 51130 PRINT"[212]HE PARAMETERS ARE CONTAINED IN SEVERAL" 51140 PRINT"MENUS. [215]ITHIN EACH MENU YOU CAN MOVE" 51150 PRINT"A POINTER UP AND DOWN USING THE JOYSTICK" 51160 PRINT"OR THE ARROW KEYS TO REACH THE PARAMETER" 51170 PRINT"YOU WISH TO ADJUST. [217]OU THEN CHANGE" 51180 PRINT"[200]IT ANY KEY TO CONTINUE."; 51190 GETI$:IFI$=""THEN51190 51200 PRINT"[147]" 51210 PRINT"THE PARAMETER BY MOVING THE JOYSTICK TO" 51220 PRINT"THE LEFT TO LOWER IT, OR TO THE RIGHT" 51230 PRINT"TO RAISE IT. ([207]R USE THE LEFT OR RIGHT" 51240 PRINT"ARROW KEYS.) [198]OR MORE DETAILS ABOUT" 51245 PRINT"A PARAMETER, PRESS THE QUESTION MARK" 51250 PRINT"(?) OR THE SLASH (/) WHILE THE POINTER" 51260 PRINT"IS NEXT TO THE DESIRED PARAMETER." 51270 PRINT"[200]IT ANY KEY TO CONTINUE." 51280 GETI$:IFI$=""THEN51280 51290 PRINT"[147]" 51300 PRINT"[212]HERE ARE 3 SEPARATE VOICES WHICH CAN" 51310 PRINT"ALL PLAY AT ONCE. [212]O SWITCH FROM ONE" 51320 PRINT"VOICE TO ANOTHER, HIT THE NUMBER KEY" 51330 PRINT"(1 THROUGH 3) CORRESPONDING TO THE" 51340 PRINT"DESIRED VOICE." 51345 PRINT"[212]O START THE SOUND PLAYING FOR THE" 51350 PRINT"VOICE PRESENTLY SELECTED, PRESS THE" 51360 PRINT"JOYSTICK BUTTON OR THE SPACE BAR." 51370 PRINT"[200]IT IT AGAIN TO STOP THE TONE. [212]O STOP" 51380 PRINT"ALL VOICES AT ONCE PRESS THE ZERO (0)" 51390 PRINT"KEY." 51400 PRINT"[200]IT ANY KEY TO CONTINUE."; 51410 GETI$:IFI$=""THEN51410 51420 PRINT"[147]" 51430 PRINT"[208]RESSING THE '[198]'[160]OR '[205]' KEYS WILL SELECT" 51440 PRINT"ADDITIONAL MENUS FOR VARIOUS SPECIAL" 51450 PRINT"FUNCTIONS. [208]RESSING [210][197][212][213][210][206][146] FROM" 51460 PRINT"THESE MENUS RETURNS YOU TO THE TOP" 51470 PRINT"LEVEL." 51480 PRINT"[200]IT [210][197][212][213][210][206][146] FROM THE TOP LEVEL MENU" 51490 PRINT"TO QUIT. [217]OU WILL BE GIVEN AN OPTION" 51500 PRINT"TO SEE THE POKES NECESSARY TO PRODUCE" 51510 PRINT"THE NOTE YOU HAVE GENERATED." 51520 PRINT"[200]IT ANY KEY TO CONTINUE."; 51530 GETI$:IFI$=""THEN51530 51540 PRINT"[147]" 51550 PRINT"[198]OR THIS TO WORK PROPERLY, YOU SHOULD" 51560 PRINT"HAVE ALL VOICES YOU ARE USING TURNED" 51570 PRINT"ON WHEN YOU QUIT, SO THE PROGRAM KNOWS" 51580 PRINT"WHICH VOICES YOU ARE USING." 51590 PRINT"[200]IT ANY KEY TO CONTINUE."; 51600 GETI$:IFI$=""THEN51600 51610 GOTO51000 63000 PRINT"[147]LOAD"CHR$(34)"HELLO"CHR$(34)",8":PRINT"RUN" 63005 POKE631,13:POKE632,13:POKE198,2:END